Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/frontend/components/interfaces/InterfacesPage.vue b46d018b265c25ca8701af59287806891a9bd502 (b46d018b) Text, 52.48 KB

Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-col flex-1 overflow-hidden min-w-0 bg-gradient-to-br from-slate-50 via-slate-100 to-white dark:from-zinc-950 dark:via-zinc-900 dark:to-zinc-900"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto w-full"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-3 md:p-6 space-y-4 w-full flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showRestartReminderTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"bg-gradient-to-r from-amber-500 to-orange-500 text-white rounded-3xl shadow-xl p-4 flex flex-wrap gap-3 items-center"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"alert" Te6edf3classTff7b72=Ta5d6ff"w-6 h-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-semibold"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.restart_required"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.restart_description"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isElectronTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"ml-auto inline-flex items-center gap-2 rounded-full border border-white/40 px-4 py-1.5 text-sm font-semibold text-white hover:bg-white/10 transition"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3relaunchTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"restart" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.restart_now"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-3 items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.manage"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xl font-semibold text-gray-900 dark:text-white truncate"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.title"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-600 dark:text-gray-300"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.description"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72RouterLink Tb4b4b4:Te6edf3toTff7b72=Ta5d6ff"Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff'interfaces.add' Tb4b4b4}Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"primary-chip px-4 py-2 text-sm"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.add_interface"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72RouterLinkTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"secondary-chip text-sm" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showImportInterfacesModalTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"import" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.import"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"secondary-chip text-sm" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3exportInterfacesTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"export" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.export_all"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
T8b949e<!--
<button
type="button"
class="secondary-chip text-sm bg-amber-500/10 hover:bg-amber-500/20 text-amber-600 dark:text-amber-400 border-amber-500/30"
:disabled="reloadingRns"
@click="reloadRns"
>
<MaterialDesignIcon
:icon-name="reloadingRns ? 'refresh' : 'restart'"
class="w-4 h-4"
:class="{ 'animate-spin-reverse': reloadingRns }"
/>
{{ reloadingRns ? $t("app.reloading_rns") : $t("app.reload_rns") }}
</button>
-->Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-3 items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3searchTermTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'interfaces.search_placeholder'Tb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2 flex-wrap"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3filterChipClassTb4b4b4(Te6edf3statusFilter Tff7b72=== Ta5d6ff'all'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setStatusFilterTb4b4b4(Ta5d6ff'all'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.all"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3filterChipClassTb4b4b4(Te6edf3statusFilter Tff7b72=== Ta5d6ff'enabled'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setStatusFilterTb4b4b4(Ta5d6ff'enabled'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.enabled"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3filterChipClassTb4b4b4(Te6edf3statusFilter Tff7b72=== Ta5d6ff'disabled'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3setStatusFilterTb4b4b4(Ta5d6ff'disabled'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.disabled"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"w-full sm:w-60"Tb4b4b4>
Tb4b4b4<Tff7b72select Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3typeFilterTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"input-field"Tb4b4b4>
Tb4b4b4<Tff7b72option Te6edf3valueTff7b72=Ta5d6ff"all"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.all_types"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tff7b72option Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3type Tff7b72in Te6edf3sortedInterfaceTypesTa5d6ff" Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3typeTa5d6ff" Tb4b4b4:Te6edf3valueTff7b72=Ta5d6ff"Te6edf3typeTa5d6ff"Tb4b4b4>
Tff7b72{{ Te6edf3type Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72optionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72selectTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3tab Tff7b72in Tb4b4b4[Ta5d6ff'overview'Tb4b4b4, Ta5d6ff'discovery'Tb4b4b4]Ta5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3tabTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3tabChipClassTb4b4b4(Te6edf3activeTab Tff7b72=== Te6edf3tabTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72= Te6edf3tabTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3tab Tff7b72=== Ta5d6ff'overview'Ta5d6ff"Tb4b4b4>OverviewTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-elseTb4b4b4>Discovery SettingsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3activeTab Tff7b72=== Ta5d6ff'overview'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400"Tb4b4b4>
Configured
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xl font-semibold text-gray-900 dark:text-white"Tb4b4b4>InterfacesTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3filteredInterfacesTb4b4b4.Te6edf3length Tff7b72!== T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"grid gap-4 xl:grid-cols-2 2xl:grid-cols-3 3xl:grid-cols-4 4xl:grid-cols-5"
Tb4b4b4>
Tb4b4b4<Tff7b72Interface
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3iface Tff7b72of Te6edf3filteredInterfacesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3_nameTa5d6ff"
Tb4b4b4:Te6edf3ifaceTff7b72=Ta5d6ff"Te6edf3ifaceTa5d6ff"
Tb4b4b4:Te6edf3is-reticulum-runningTff7b72=Ta5d6ff"Te6edf3isReticulumRunningTa5d6ff"
Tb4b4b4@Te6edf3enableTff7b72=Ta5d6ff"Te6edf3enableInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3disableTff7b72=Ta5d6ff"Te6edf3disableInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3editTff7b72=Ta5d6ff"Te6edf3editInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3exportTff7b72=Ta5d6ff"Te6edf3exportInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3deleteTff7b72=Ta5d6ff"Te6edf3deleteInterfaceTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4)Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"glass-card text-center py-10 text-gray-500 dark:text-gray-300"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"lan-disconnect" Te6edf3classTff7b72=Ta5d6ff"w-10 h-10 mx-auto mb-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-semibold"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.no_interfaces_found"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.no_interfaces_description"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400"Tb4b4b4>
Discovered Interfaces
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xl font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Recently Heard Announces
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-600 dark:text-gray-300"Tb4b4b4>
Discovery runs continually; heard announces stay listed. Connected entries show
a green pill; disconnected entries are dimmed with a red label.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3interfacesWithLocationTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Ta5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip text-xs bg-blue-500/10 hover:bg-blue-500/20 text-blue-600 dark:text-blue-400 border-blue-500/30"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3mapAllDiscoveredTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"map-marker-multiple" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Map All (Tff7b72{{ Te6edf3interfacesWithLocationTb4b4b4.Te6edf3length Tff7b72}})
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip text-xs"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3loadDiscoveredInterfacesTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"refresh" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Refresh
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3sortedDiscoveredInterfacesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 dark:text-gray-300"
Tb4b4b4>
Tff7b72{{ Te6edf3discoveredEmptyMessage Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"grid gap-4 lg:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5 4xl:grid-cols-6"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3iface Tff7b72in Te6edf3sortedDiscoveredInterfacesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3discovery_hash Tff7b72|| Te6edf3ifaceTb4b4b4.Te6edf3nameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"interface-card group transition-all duration-300"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'opacity-70 grayscale-[0.3]'Tff7b72: Tff7b72!Te6edf3isDiscoveredConnectedTb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4}Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-4 items-start relative"Tb4b4b4>
T8b949e<!-- Disconnected Overlay -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3isDiscoveredConnectedTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"absolute inset-0 z-10 flex items-center justify-center bg-white/20 dark:bg-zinc-900/20 backdrop-blur-[0.5px] rounded-3xl pointer-events-none"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"bg-red-500/90 text-white px-3 py-1.5 rounded-full shadow-lg flex items-center gap-2 text-[10px] font-bold uppercase tracking-wider animate-pulse"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"lan-disconnect" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.disabled"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"interface-card__icon shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3getDiscoveryIconTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"w-6 h-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 min-w-0 space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 flex-nowrap min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"text-base sm:text-lg font-semibold text-gray-900 dark:text-white truncate min-w-0"
Tb4b4b4>
Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"type-chip shrink-0"Tb4b4b4>Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3type Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 flex-wrap"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3valueTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-[10px] font-bold text-blue-600 dark:text-blue-400"
Tb4b4b4>
Stamps: Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3value Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isDiscoveredConnectedTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"inline-flex items-center rounded-full bg-emerald-100 text-emerald-700 px-2 py-0.5 text-[10px] font-semibold dark:bg-emerald-900/40 dark:text-emerald-200 shrink-0"
Tb4b4b4>
Connected
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-1.5 text-[10px] sm:text-xs"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"stat-chip bg-gray-50 dark:bg-zinc-800/50"
Tb4b4b4>Hops: Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3hops Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"stat-chip capitalize bg-gray-50 dark:bg-zinc-800/50"Tb4b4b4>Tff7b72{{
Te6edf3ifaceTb4b4b4.Te6edf3status
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3last_heardTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"stat-chip bg-gray-50 dark:bg-zinc-800/50"
Tb4b4b4>
Heard: Tff7b72{{ Te6edf3formatLastHeardTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3last_heardTb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid gap-1.5 text-[10px] sm:text-[11px] pt-1 min-w-0"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3reachable_onTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 text-gray-600 dark:text-gray-400 hover:text-blue-500 cursor-pointer transition-colors min-w-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3copyToClipboardTb4b4b4(
Ta5d6ff`Tffd700${Te6edf3ifaceTb4b4b4.Te6edf3reachable_onTffd700}Ta5d6ff:Tffd700${Te6edf3ifaceTb4b4b4.Te6edf3portTffd700}Ta5d6ff`Tb4b4b4,
Ta5d6ff'Address'
Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"link-variant"
Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5 shrink-0"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"truncate"
Tb4b4b4>Address: Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3reachable_on Tff7b72}}:Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3port Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3transport_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 text-gray-600 dark:text-gray-400 hover:text-blue-500 cursor-pointer transition-colors min-w-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3copyToClipboardTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3transport_idTb4b4b4, Ta5d6ff'Transport ID'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"identifier"
Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5 shrink-0"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"truncate font-mono"
Tb4b4b4>Transport ID: Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3transport_id Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3network_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 text-gray-600 dark:text-gray-400 hover:text-blue-500 cursor-pointer transition-colors min-w-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3copyToClipboardTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3network_idTb4b4b4, Ta5d6ff'Network ID'Tb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"lan" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5 shrink-0" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"truncate font-mono"
Tb4b4b4>Network ID: Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3network_id Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3latitude Tff7b72!= Tff7b72null Tff7b72&& Te6edf3ifaceTb4b4b4.Te6edf3longitude Tff7b72!= Tff7b72nullTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 text-gray-600 dark:text-gray-400 hover:text-blue-500 cursor-pointer transition-colors min-w-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"
Te6edf3copyToClipboardTb4b4b4(
Ta5d6ff`Tffd700${Te6edf3ifaceTb4b4b4.Te6edf3latitudeTffd700}Ta5d6ff, Tffd700${Te6edf3ifaceTb4b4b4.Te6edf3longitudeTffd700}Ta5d6ff`Tb4b4b4,
Ta5d6ff'Location'
Tb4b4b4)
Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"map-marker"
Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5 shrink-0"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"truncate"
Tb4b4b4>Loc: Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3latitude Tff7b72}}, Tff7b72{{ Te6edf3ifaceTb4b4b4.Te6edf3longitude Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3discoveredBytesTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2 text-gray-500 dark:text-gray-500 min-w-0"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Te6edf3icon-nameTff7b72=Ta5d6ff"swap-vertical"
Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5 shrink-0"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"truncate"
Tb4b4b4>TX Tff7b72{{ Te6edf3discoveredBytesTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4.Te6edf3tx Tff7b72}} · RX
Tff7b72{{ Te6edf3discoveredBytesTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4.Te6edf3rx Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col gap-2 shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3ifaceTb4b4b4.Te6edf3latitude Tff7b72!= Tff7b72null Tff7b72&& Te6edf3ifaceTb4b4b4.Te6edf3longitude Tff7b72!= Tff7b72nullTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip !p-2 !rounded-xl"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'map.title'Tb4b4b4)Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3goToMapTb4b4b4(Te6edf3ifaceTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"map" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-3 items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400"Tb4b4b4>
Discovery
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xl font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Interface Discovery
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-600 dark:text-gray-300"Tb4b4b4>
Publish your interfaces for others to find, or listen for announced entrypoints
and auto-connect to them.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72RouterLink Tb4b4b4:Te6edf3toTff7b72=Ta5d6ff"Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff'interfaces.add' Tb4b4b4}Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"secondary-chip text-sm"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"lan" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Configure Per-Interface
Tb4b4b4<Tb4b4b4/Tff7b72RouterLinkTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid gap-4 md:grid-cols-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2 text-sm text-gray-700 dark:text-gray-300"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-semibold text-gray-900 dark:text-white"Tb4b4b4>Publish (Server)Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Enable discovery while adding or editing an interface to broadcast reachable
details. Reticulum will sign and stamp announces automatically.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-gray-400"Tb4b4b4>
Requires LXMF in the Python environment. Transport is optional for publishing,
but usually recommended so peers can connect back.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col mr-auto"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Discover Interfaces (Peer)
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-gray-400"Tb4b4b4>
Listen for discovery announces and optionally auto-connect to available
interfaces.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72Toggle Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3discoveryConfigTb4b4b4.Te6edf3discover_interfacesTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"my-auto mx-2" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid grid-cols-1 gap-2 sm:grid-cols-2"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs font-semibold text-gray-700 dark:text-gray-200"Tb4b4b4>
Allowed Sources
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3discoveryConfigTb4b4b4.Te6edf3interface_discovery_sourcesTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Comma separated identity hashes"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs font-semibold text-gray-700 dark:text-gray-200"Tb4b4b4>
Required Stamp Value
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3discoveryConfigTb4b4b4.Te6edf3required_discovery_valueTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs font-semibold text-gray-700 dark:text-gray-200"Tb4b4b4>
Auto-connect Slots
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTb4b4b4.Te6edf3numberTff7b72=Ta5d6ff"Te6edf3discoveryConfigTb4b4b4.Te6edf3autoconnect_discovered_interfacesTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"number"
Te6edf3minTff7b72=Ta5d6ff"0"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-gray-400"Tb4b4b4>
0 disables auto-connect.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs font-semibold text-gray-700 dark:text-gray-200"Tb4b4b4>
Network Identity Path
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3discoveryConfigTb4b4b4.Te6edf3network_identityTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"~/.reticulum/storage/identities/..."
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-end"Tb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"primary-chip text-xs"
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Te6edf3savingDiscoveryTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3saveDiscoveryConfigTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon
Tb4b4b4:Te6edf3icon-nameTff7b72=Ta5d6ff"Te6edf3savingDiscovery Tff7b72? Ta5d6ff'progress-clock' Tff7b72: Ta5d6ff'content-save'Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-4 h-4"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4{ Ta5d6ff'animate-spin-reverse'Tff7b72: Te6edf3savingDiscovery Tb4b4b4}Ta5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ml-1"Tb4b4b4>Save Discovery SettingsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72ImportInterfacesModal Te6edf3refTff7b72=Ta5d6ff"import-interfaces-modal" Tb4b4b4@Te6edf3dismissedTff7b72=Ta5d6ff"Te6edf3onImportInterfacesModalDismissedTa5d6ff" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>

Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3DialogUtils Tff7b72from Ta5d6ff"../../js/DialogUtils"Tb4b4b4;
Tff7b72import Te6edf3ElectronUtils Tff7b72from Ta5d6ff"../../js/ElectronUtils"Tb4b4b4;
Tff7b72import Te6edf3Interface Tff7b72from Ta5d6ff"./Interface.vue"Tb4b4b4;
Tff7b72import Te6edf3Utils Tff7b72from Ta5d6ff"../../js/Utils"Tb4b4b4;
Tff7b72import Te6edf3ImportInterfacesModal Tff7b72from Ta5d6ff"./ImportInterfacesModal.vue"Tb4b4b4;
Tff7b72import Te6edf3DownloadUtils Tff7b72from Ta5d6ff"../../js/DownloadUtils"Tb4b4b4;
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../js/ToastUtils"Tb4b4b4;
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"../../js/GlobalState"Tb4b4b4;
Tff7b72import Te6edf3Toggle Tff7b72from Ta5d6ff"../forms/Toggle.vue"Tb4b4b4;

Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"InterfacesPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3ToggleTb4b4b4,
Te6edf3ImportInterfacesModalTb4b4b4,
Te6edf3InterfaceTb4b4b4,
Te6edf3MaterialDesignIconTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3interfacesTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3interfaceStatsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3reloadIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3searchTermTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3statusFilterTff7b72: Ta5d6ff"all"Tb4b4b4,
Te6edf3typeFilterTff7b72: Ta5d6ff"all"Tb4b4b4,
Te6edf3reloadingRnsTff7b72: Tff7b72falseTb4b4b4,
Te6edf3isReticulumRunningTff7b72: Tff7b72trueTb4b4b4,
Te6edf3discoveryConfigTff7b72: Tb4b4b4{
Te6edf3discover_interfacesTff7b72: Tff7b72falseTb4b4b4,
Te6edf3interface_discovery_sourcesTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3required_discovery_valueTff7b72: Tff7b72nullTb4b4b4,
Te6edf3autoconnect_discovered_interfacesTff7b72: T79c0ff0Tb4b4b4,
Te6edf3network_identityTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3savingDiscoveryTff7b72: Tff7b72falseTb4b4b4,
Te6edf3discoveredInterfacesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3discoveredActiveTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3discoveryIntervalTff7b72: Tff7b72nullTb4b4b4,
Te6edf3activeTabTff7b72: Ta5d6ff"overview"Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3hasPendingInterfaceChangesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChangesTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3modifiedInterfaceNamesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isElectronTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3ElectronUtilsTb4b4b4.Te6edf3isElectronTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3showRestartReminderTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3hasPendingInterfaceChangesTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3interfacesWithStatsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3results Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Tb4b4b4[Te6edf3interfaceNameTb4b4b4, Te6edf3ifaceTb4b4b4] Tff7b72of Tffa657ObjectTb4b4b4.Te6edf3entriesTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3interfacesTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ifaceTb4b4b4.Te6edf3_name Tff7b72= Te6edf3interfaceNameTb4b4b4;
Te6edf3ifaceTb4b4b4.Te6edf3_stats Tff7b72= Tff7b72thisTb4b4b4.Te6edf3interfaceStatsTb4b4b4[Te6edf3interfaceNameTb4b4b4]Tb4b4b4;
Te6edf3ifaceTb4b4b4.Te6edf3_restart_required Tff7b72= Tff7b72thisTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Te6edf3resultsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3resultsTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3enabledInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3interfacesWithStatsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3disabledInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3interfacesWithStatsTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3filteredInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3search Tff7b72= Tff7b72thisTb4b4b4.Te6edf3searchTermTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3interfacesWithStats
Tb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusFilter Tff7b72=== Ta5d6ff"enabled" Tff7b72&& Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusFilter Tff7b72=== Ta5d6ff"disabled" Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3typeFilter Tff7b72!== Ta5d6ff"all" Tff7b72&& Te6edf3ifaceTb4b4b4.Te6edf3type Tff7b72!== Tff7b72thisTb4b4b4.Te6edf3typeFilterTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3searchTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3haystack Tff7b72= Tb4b4b4[
Te6edf3ifaceTb4b4b4.Te6edf3_nameTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3typeTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3target_hostTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3target_portTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3listen_ipTb4b4b4,
Te6edf3ifaceTb4b4b4.Te6edf3listen_portTb4b4b4,
Tb4b4b4]
Tb4b4b4.Te6edf3filterTb4b4b4(Tffa657BooleanTb4b4b4)
Tb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff" "Tb4b4b4)
Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3haystackTb4b4b4.Te6edf3includesTb4b4b4(Te6edf3searchTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)
Tb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3enabledDiff Tff7b72= Tffa657NumberTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3bTb4b4b4)Tb4b4b4) Tff7b72- Tffa657NumberTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3aTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3enabledDiff Tff7b72!== T79c0ff0Tb4b4b4) Tff7b72return Te6edf3enabledDiffTb4b4b4;
Tff7b72return Te6edf3aTb4b4b4.Te6edf3_nameTb4b4b4.Te6edf3localeCompareTb4b4b4(Te6edf3bTb4b4b4.Te6edf3_nameTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3sortedInterfaceTypesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3types Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3interfacesWithStatsTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Te6edf3typesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3typeTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Te6edf3typesTb4b4b4)Tb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3sortedDiscoveredInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4[Tb4b4b4...Tff7b72thisTb4b4b4.Te6edf3discoveredInterfacesTb4b4b4]Tb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4) Tb4b4b4=> Tb4b4b4(Te6edf3bTb4b4b4.Te6edf3last_heard Tff7b72|| T79c0ff0Tb4b4b4) Tff7b72- Tb4b4b4(Te6edf3aTb4b4b4.Te6edf3last_heard Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3interfacesWithLocationTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3discoveredInterfacesTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Te6edf3ifaceTb4b4b4.Te6edf3latitude Tff7b72!= Tff7b72null Tff7b72&& Te6edf3ifaceTb4b4b4.Te6edf3longitude Tff7b72!= Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3activeInterfaceStatsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657ObjectTb4b4b4.Te6edf3valuesTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3interfaceStats Tff7b72|| Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3tabChipClassTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Te6edf3isActiveTb4b4b4) Tb4b4b4=> Tb4b4b4(Te6edf3isActive Tff7b72? Ta5d6ff"primary-chip text-xs" Tff7b72: Ta5d6ff"secondary-chip text-xs"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3discoveredActiveSetTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3set Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3discoveredActiveTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3aTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3host Tff7b72= Te6edf3aTb4b4b4.Te6edf3target_host Tff7b72|| Te6edf3aTb4b4b4.Te6edf3remote Tff7b72|| Te6edf3aTb4b4b4.Te6edf3listen_ipTb4b4b4;
Tff7b72const Te6edf3port Tff7b72= Te6edf3aTb4b4b4.Te6edf3target_port Tff7b72|| Te6edf3aTb4b4b4.Te6edf3listen_portTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3host Tff7b72&& Te6edf3portTb4b4b4) Tb4b4b4{
Te6edf3setTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff`Tffd700${Te6edf3hostTffd700}Ta5d6ff:Tffd700${Te6edf3portTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3setTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3discoveredActiveTransportIdsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3set Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3discoveredActiveTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3aTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3aTb4b4b4.Te6edf3transport_idTb4b4b4) Tb4b4b4{
Te6edf3setTb4b4b4.Te6edf3addTb4b4b4(Te6edf3aTb4b4b4.Te6edf3transport_idTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3setTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3discoveredEmptyMessageTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isReticulumRunningTb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"LXMF/Reticulum is not running; discovery cannot listen for announces."Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3discover_interfacesTb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"Discovery is disabled. Enable it to start listening for announces."Tb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff"Discovery is working, be patient while it waits for announces."Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3reloadIntervalTb4b4b4)Tb4b4b4;
Te6edf3clearIntervalTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3discoveryIntervalTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3updateInterfaceStatsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3loadDiscoveryConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3loadDiscoveredInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// update info every few seconds
Tff7b72thisTb4b4b4.Te6edf3reloadInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3updateInterfaceStatsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff1000Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3discoveryInterval Tff7b72= Te6edf3setIntervalTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loadDiscoveredInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff5000Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Te6edf3relaunchTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3ElectronUtilsTb4b4b4.Te6edf3relaunchTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3trackInterfaceChangeTb4b4b4(Te6edf3interfaceName Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3addTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3isInterfaceEnabledTff7b72: Tff7b72function Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/interfacesTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3interfaces Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3interfacesTb4b4b4;

T8b949e// also check app info for running state
Tff7b72const Te6edf3appInfoResponse Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/app/infoTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isReticulumRunning Tff7b72= Te6edf3appInfoResponseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3app_infoTb4b4b4.Te6edf3is_reticulum_runningTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// do nothing if failed to load interfaces
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3updateInterfaceStatsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// fetch interface stats
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/interface-statsTa5d6ff`Tb4b4b4)Tb4b4b4;

T8b949e// update data
Tff7b72const Te6edf3interfaces Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3interface_statsTff7b72?Tb4b4b4.Te6edf3interfaces Tff7b72?? Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3iface Tff7b72of Te6edf3interfacesTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3interfaceStatsTb4b4b4[Te6edf3ifaceTb4b4b4.Te6edf3short_nameTb4b4b4] Tff7b72= Te6edf3ifaceTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// do nothing if failed to load interfaces
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3enableInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
T8b949e// enable interface
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/interfaces/enableTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3interfaceNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3trackInterfaceChangeTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.failed_enable"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e// reload interfaces
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3disableInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
T8b949e// disable interface
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/interfaces/disableTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3interfaceNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3trackInterfaceChangeTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.failed_disable"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e// reload interfaces
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3editInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"interfaces.edit"Tb4b4b4,
Te6edf3queryTff7b72: Tb4b4b4{
Te6edf3interface_nameTff7b72: Te6edf3interfaceNameTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
T8b949e// ask user to confirm deleting conversation history
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.delete_confirm"Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}

T8b949e// delete interface
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/interfaces/deleteTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Te6edf3interfaceNameTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3trackInterfaceChangeTb4b4b4(Te6edf3interfaceNameTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.failed_delete"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e// reload interfaces
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3exportInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// fetch exported interfaces
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/interfaces/export"Tb4b4b4)Tb4b4b4;

T8b949e// download file to browser
Te6edf3DownloadUtilsTb4b4b4.Te6edf3downloadFileTb4b4b4(Ta5d6ff"meshchat_interfaces.txt"Tb4b4b4, Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.failed_export_all"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3exportInterfaceTb4b4b4(Te6edf3interfaceNameTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
T8b949e// fetch exported interfaces
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/interfaces/export"Tb4b4b4, Tb4b4b4{
Te6edf3selected_interface_namesTff7b72: Tb4b4b4[Te6edf3interfaceNameTb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// download file to browser
Te6edf3DownloadUtilsTb4b4b4.Te6edf3downloadFileTb4b4b4(Ta5d6ff`Tffd700${Te6edf3interfaceNameTffd700}Ta5d6ff.txtTa5d6ff`Tb4b4b4, Tff7b72new Te6edf3BlobTb4b4b4(Tb4b4b4[Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.failed_export_single"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3showImportInterfacesModalTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$refsTb4b4b4[Ta5d6ff"import-interfaces-modal"Tb4b4b4]Tb4b4b4.Te6edf3showTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3onImportInterfacesModalDismissedTb4b4b4(Te6edf3imported Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4{
T8b949e// reload interfaces as something may have been imported
Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3importedTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3trackInterfaceChangeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadDiscoveredInterfacesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/discovered-interfacesTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3incoming Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3interfaces Tff7b72?? Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3active Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3active Tff7b72?? Tb4b4b4[Tb4b4b4]Tb4b4b4;

Tff7b72const Te6edf3merged Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3addOrUpdate Tff7b72= Tb4b4b4(Te6edf3ifaceTb4b4b4, Te6edf3isNew Tff7b72= Tff7b72falseTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3key Tff7b72= Tff7b72thisTb4b4b4.Te6edf3discoveryKeyTb4b4b4(Te6edf3ifaceTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3existing Tff7b72=
Te6edf3mergedTb4b4b4.Te6edf3getTb4b4b4(Te6edf3keyTb4b4b4) Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3discoveredInterfacesTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3iTb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3discoveryKeyTb4b4b4(Te6edf3iTb4b4b4) Tff7b72=== Te6edf3keyTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3lastHeard Tff7b72= Te6edf3ifaceTb4b4b4.Te6edf3last_heard Tff7b72?? Te6edf3existingTff7b72?Tb4b4b4.Te6edf3last_heard Tff7b72?? Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000Tb4b4b4)Tb4b4b4;
Te6edf3mergedTb4b4b4.Te6edf3setTb4b4b4(Te6edf3keyTb4b4b4, Tb4b4b4{
Tb4b4b4...Te6edf3existingTb4b4b4,
Tb4b4b4...Te6edf3ifaceTb4b4b4,
Te6edf3last_heardTff7b72: Te6edf3lastHeardTb4b4b4,
Te6edf3__isNewTff7b72: Te6edf3isNew Tff7b72|| Te6edf3existingTff7b72?Tb4b4b4.Te6edf3__isNewTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3discoveredInterfacesTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Te6edf3addOrUpdateTb4b4b4(Te6edf3ifaceTb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3incomingTb4b4b4.Te6edf3forEachTb4b4b4(Tb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4=> Te6edf3addOrUpdateTb4b4b4(Te6edf3ifaceTb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72thisTb4b4b4.Te6edf3discoveredInterfaces Tff7b72= Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Te6edf3mergedTb4b4b4.Te6edf3valuesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3discoveredActive Tff7b72= Te6edf3activeTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3discoveryKeyTb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(
Te6edf3ifaceTb4b4b4.Te6edf3discovery_hash Tff7b72||
Ta5d6ff`Tffd700${Te6edf3ifaceTb4b4b4.Te6edf3reachable_on Tff7b72|| Te6edf3ifaceTb4b4b4.Te6edf3target_host Tff7b72|| Te6edf3ifaceTb4b4b4.Te6edf3remote Tff7b72|| Te6edf3ifaceTb4b4b4.Te6edf3listen_ip Tff7b72|| Te6edf3ifaceTb4b4b4.Te6edf3name Tff7b72|| Ta5d6ff"unknown"Tffd700}Ta5d6ff:Tffd700${
Te6edf3ifaceTb4b4b4.Te6edf3port Tff7b72|| Te6edf3ifaceTb4b4b4.Te6edf3target_port Tff7b72|| Te6edf3ifaceTb4b4b4.Te6edf3listen_port Tff7b72|| Ta5d6ff""
Tffd700}Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatLastHeardTb4b4b4(Te6edf3tsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3seconds Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Te6edf3tsTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3seconds Tff7b72< T79c0ff60Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Te6edf3secondsTffd700}Ta5d6ffs agoTa5d6ff`Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3seconds Tff7b72< T79c0ff3600Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3seconds Tff7b72/ T79c0ff60Tb4b4b4)Tffd700}Ta5d6ffm agoTa5d6ff`Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3seconds Tff7b72< T79c0ff86400Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3seconds Tff7b72/ T79c0ff3600Tb4b4b4)Tffd700}Ta5d6ffh agoTa5d6ff`Tb4b4b4;
Tff7b72return Ta5d6ff`Tffd700${Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3seconds Tff7b72/ T79c0ff86400Tb4b4b4)Tffd700}Ta5d6ffd agoTa5d6ff`Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isDiscoveredConnectedTb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3reach Tff7b72= Te6edf3ifaceTb4b4b4.Te6edf3reachable_onTb4b4b4;
Tff7b72const Te6edf3port Tff7b72= Te6edf3ifaceTb4b4b4.Te6edf3portTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3transport_id Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3discoveredActiveTransportIdsTb4b4b4.Te6edf3hasTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3transport_idTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3reach Tff7b72&& Te6edf3port Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3discoveredActiveSet Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3discoveredActiveSetTb4b4b4.Te6edf3hasTb4b4b4(Ta5d6ff`Tffd700${Te6edf3reachTffd700}Ta5d6ff:Tffd700${Te6edf3portTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3activeInterfaceStatsTb4b4b4.Te6edf3someTb4b4b4(Tb4b4b4(Te6edf3sTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3hostMatch Tff7b72=
Tb4b4b4(Te6edf3sTb4b4b4.Te6edf3target_host Tff7b72&& Te6edf3reach Tff7b72&& Te6edf3sTb4b4b4.Te6edf3target_host Tff7b72=== Te6edf3reachTb4b4b4) Tff7b72|| Tb4b4b4(Te6edf3sTb4b4b4.Te6edf3remote Tff7b72&& Te6edf3reach Tff7b72&& Te6edf3sTb4b4b4.Te6edf3remote Tff7b72=== Te6edf3reachTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3portMatch Tff7b72=
Tb4b4b4(Te6edf3sTb4b4b4.Te6edf3target_port Tff7b72&& Te6edf3port Tff7b72&& Tffa657NumberTb4b4b4(Te6edf3sTb4b4b4.Te6edf3target_portTb4b4b4) Tff7b72=== Tffa657NumberTb4b4b4(Te6edf3portTb4b4b4)Tb4b4b4) Tff7b72||
Tb4b4b4(Te6edf3sTb4b4b4.Te6edf3listen_port Tff7b72&& Te6edf3port Tff7b72&& Tffa657NumberTb4b4b4(Te6edf3sTb4b4b4.Te6edf3listen_portTb4b4b4) Tff7b72=== Tffa657NumberTb4b4b4(Te6edf3portTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3hostMatch Tff7b72&& Te6edf3portMatch Tff7b72&& Tb4b4b4(Te6edf3sTb4b4b4.Te6edf3connected Tff7b72|| Te6edf3sTb4b4b4.Te6edf3onlineTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3goToMapTb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3latitude Tff7b72== Tff7b72null Tff7b72|| Te6edf3ifaceTb4b4b4.Te6edf3longitude Tff7b72== Tff7b72nullTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"map"Tb4b4b4,
Te6edf3queryTff7b72: Tb4b4b4{
Te6edf3latTff7b72: Te6edf3ifaceTb4b4b4.Te6edf3latitudeTb4b4b4,
Te6edf3lonTff7b72: Te6edf3ifaceTb4b4b4.Te6edf3longitudeTb4b4b4,
Te6edf3labelTff7b72: Te6edf3ifaceTb4b4b4.Te6edf3nameTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3mapAllDiscoveredTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"map"Tb4b4b4,
Te6edf3queryTff7b72: Tb4b4b4{ Te6edf3viewTff7b72: Ta5d6ff"discovered" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3discoveredBytesTb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3reach Tff7b72= Te6edf3ifaceTb4b4b4.Te6edf3reachable_onTb4b4b4;
Tff7b72const Te6edf3port Tff7b72= Te6edf3ifaceTb4b4b4.Te6edf3portTb4b4b4;
Tff7b72const Te6edf3stats Tff7b72= Tff7b72thisTb4b4b4.Te6edf3activeInterfaceStats Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3match Tff7b72= Te6edf3statsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3sTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3host Tff7b72= Te6edf3sTb4b4b4.Te6edf3target_host Tff7b72|| Te6edf3sTb4b4b4.Te6edf3remote Tff7b72|| Te6edf3sTb4b4b4.Te6edf3interface_nameTb4b4b4;
Tff7b72const Te6edf3p Tff7b72= Te6edf3sTb4b4b4.Te6edf3target_port Tff7b72|| Te6edf3sTb4b4b4.Te6edf3listen_portTb4b4b4;
Tff7b72const Te6edf3hostMatch Tff7b72= Te6edf3host Tff7b72&& Te6edf3reach Tff7b72&& Te6edf3host Tff7b72=== Te6edf3reachTb4b4b4;
Tff7b72const Te6edf3portMatch Tff7b72= Te6edf3p Tff7b72&& Te6edf3port Tff7b72&& Tffa657NumberTb4b4b4(Te6edf3pTb4b4b4) Tff7b72=== Tffa657NumberTb4b4b4(Te6edf3portTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3hostMatch Tff7b72&& Te6edf3portMatchTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3matchTb4b4b4) Tff7b72return Tff7b72nullTb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3txTff7b72: Tff7b72thisTb4b4b4.Te6edf3formatBytesTb4b4b4(Te6edf3matchTb4b4b4.Te6edf3txb Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3rxTff7b72: Tff7b72thisTb4b4b4.Te6edf3formatBytesTb4b4b4(Te6edf3matchTb4b4b4.Te6edf3rxb Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatBytesTb4b4b4(Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3UtilsTb4b4b4.Te6edf3formatBytesTb4b4b4(Te6edf3bytes Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3parseBoolTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3value Tff7b72=== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4[Ta5d6ff"true"Tb4b4b4, Ta5d6ff"yes"Tb4b4b4, Ta5d6ff"1"Tb4b4b4, Ta5d6ff"y"Tb4b4b4, Ta5d6ff"on"Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Te6edf3valueTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657BooleanTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3loadDiscoveryConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/discoveryTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3discovery Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3discovery Tff7b72?? Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3discover_interfaces Tff7b72= Tff7b72thisTb4b4b4.Te6edf3parseBoolTb4b4b4(Te6edf3discoveryTb4b4b4.Te6edf3discover_interfacesTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3interface_discovery_sources Tff7b72= Te6edf3discoveryTb4b4b4.Te6edf3interface_discovery_sources Tff7b72?? Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3required_discovery_value Tff7b72=
Te6edf3discoveryTb4b4b4.Te6edf3required_discovery_value Tff7b72!== Tff7b72undefined Tff7b72&&
Te6edf3discoveryTb4b4b4.Te6edf3required_discovery_value Tff7b72!== Tff7b72null Tff7b72&&
Te6edf3discoveryTb4b4b4.Te6edf3required_discovery_value Tff7b72!== Ta5d6ff""
Tff7b72? Tffa657NumberTb4b4b4(Te6edf3discoveryTb4b4b4.Te6edf3required_discovery_valueTb4b4b4)
Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3autoconnect_discovered_interfaces Tff7b72=
Te6edf3discoveryTb4b4b4.Te6edf3autoconnect_discovered_interfaces Tff7b72!== Tff7b72undefined Tff7b72&&
Te6edf3discoveryTb4b4b4.Te6edf3autoconnect_discovered_interfaces Tff7b72!== Tff7b72null Tff7b72&&
Te6edf3discoveryTb4b4b4.Te6edf3autoconnect_discovered_interfaces Tff7b72!== Ta5d6ff""
Tff7b72? Tffa657NumberTb4b4b4(Te6edf3discoveryTb4b4b4.Te6edf3autoconnect_discovered_interfacesTb4b4b4)
Tff7b72: T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3network_identity Tff7b72= Te6edf3discoveryTb4b4b4.Te6edf3network_identity Tff7b72?? Ta5d6ff""Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3saveDiscoveryConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3savingDiscoveryTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3savingDiscovery Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3payload Tff7b72= Tb4b4b4{
Te6edf3discover_interfacesTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3discover_interfacesTb4b4b4,
Te6edf3interface_discovery_sourcesTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3interface_discovery_sources Tff7b72|| Tff7b72nullTb4b4b4,
Te6edf3required_discovery_valueTff7b72:
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3required_discovery_value Tff7b72=== Tff7b72null Tff7b72||
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3required_discovery_value Tff7b72=== Ta5d6ff""
Tff7b72? Tff7b72null
Tff7b72: Tffa657NumberTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3required_discovery_valueTb4b4b4)Tb4b4b4,
Te6edf3autoconnect_discovered_interfacesTff7b72:
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3autoconnect_discovered_interfaces Tff7b72=== Tff7b72null Tff7b72||
Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3autoconnect_discovered_interfaces Tff7b72=== Ta5d6ff""
Tff7b72? T79c0ff0
Tff7b72: Tffa657NumberTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3autoconnect_discovered_interfacesTb4b4b4)Tb4b4b4,
Te6edf3network_identityTff7b72: Tff7b72thisTb4b4b4.Te6edf3discoveryConfigTb4b4b4.Te6edf3network_identity Tff7b72|| Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;

Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3patchTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/reticulum/discoveryTa5d6ff`Tb4b4b4, Te6edf3payloadTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.discovery_settings_saved"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadDiscoveryConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.failed_save_discovery"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3savingDiscovery Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3getDiscoveryIconTb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72switch Tb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3typeTb4b4b4) Tb4b4b4{
Tff7b72case Ta5d6ff"AutoInterface"Tff7b72:
Tff7b72return Ta5d6ff"home-automation"Tb4b4b4;
Tff7b72case Ta5d6ff"RNodeInterface"Tff7b72:
Tff7b72return Te6edf3ifaceTb4b4b4.Te6edf3port Tff7b72&& Te6edf3ifaceTb4b4b4.Te6edf3portTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"tcp://"Tb4b4b4) Tff7b72? Ta5d6ff"lan-connect" Tff7b72: Ta5d6ff"radio-tower"Tb4b4b4;
Tff7b72case Ta5d6ff"RNodeMultiInterface"Tff7b72:
Tff7b72return Ta5d6ff"access-point-network"Tb4b4b4;
Tff7b72case Ta5d6ff"TCPClientInterface"Tff7b72:
Tff7b72case Ta5d6ff"BackboneInterface"Tff7b72:
Tff7b72return Ta5d6ff"lan-connect"Tb4b4b4;
Tff7b72case Ta5d6ff"TCPServerInterface"Tff7b72:
Tff7b72return Ta5d6ff"lan"Tb4b4b4;
Tff7b72case Ta5d6ff"UDPInterface"Tff7b72:
Tff7b72return Ta5d6ff"wan"Tb4b4b4;
Tff7b72case Ta5d6ff"SerialInterface"Tff7b72:
Tff7b72return Ta5d6ff"usb-port"Tb4b4b4;
Tff7b72case Ta5d6ff"KISSInterface"Tff7b72:
Tff7b72case Ta5d6ff"AX25KISSInterface"Tff7b72:
Tff7b72return Ta5d6ff"antenna"Tb4b4b4;
Tff7b72case Ta5d6ff"I2PInterface"Tff7b72:
Tff7b72return Ta5d6ff"eye"Tb4b4b4;
Tff7b72case Ta5d6ff"PipeInterface"Tff7b72:
Tff7b72return Ta5d6ff"pipe"Tb4b4b4;
Tff7b72defaultTff7b72:
Tff7b72return Ta5d6ff"server-network"Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3copyToClipboardTb4b4b4(Te6edf3textTb4b4b4, Te6edf3labelTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3textTb4b4b4) Tff7b72returnTb4b4b4;
Te6edf3navigatorTb4b4b4.Te6edf3clipboardTb4b4b4.Te6edf3writeTextTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Ta5d6ff`Tffd700${Te6edf3labelTffd700}Ta5d6ff copied to clipboardTa5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3setStatusFilterTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3statusFilter Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3filterChipClassTb4b4b4(Te6edf3isActiveTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3isActive Tff7b72? Ta5d6ff"primary-chip text-xs" Tff7b72: Ta5d6ff"secondary-chip text-xs"Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3reloadRnsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3reloadingRnsTb4b4b4) Tff7b72returnTb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3reloadingRns Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/reload"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3messageTb4b4b4)Tb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadInterfacesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3error Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"interfaces.failed_reload"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3reloadingRns Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────